{
"cells": [
{
"cell_type": "markdown",
"id": "45606137-025b-4875-ac1a-7d3ae24c4b89",
"metadata": {},
"source": [
"# Working with PDB Structures in Pandas\n",
"\n",
"Let's start by loading up a PDB structure from my favourite OPIG tool, the [STCRDab](https://opig.stats.ox.ac.uk/webapps/stcrdab-stcrpred/)! Here we will look at [PDB ID 6eqb](https://opig.stats.ox.ac.uk/webapps/stcrdab-stcrpred/StrViewer?pdb=6eqb). It is a crystal structure of a T cell receptor interacting with a peptide presented by an MHC class I molecule."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "5403cb8a-d882-4633-b7ca-c5c340f37586",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "a592f0bf500f4768a305cc00d83b4513",
"version_major": 2,
"version_minor": 0
},
"text/plain": []
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import nglview"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "c1720ce4-8b63-41bb-afe9-776dc5d68cb5",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "fc94934525a046a99bdb53b3d0ab0869",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"NGLWidget()"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"view = nglview.show_file('data/6eqb.pdb')\n",
"view"
]
},
{
"cell_type": "markdown",
"id": "d6c5e466-577f-467c-a0d6-666f7f31297c",
"metadata": {},
"source": [
"Now let's load this molecules into a pandas dataframe and do some analysis. The PDB data is loaded into columns in a similar way that PDB files are formatted as columns."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "2c456cd0-1443-40f2-8d99-13f3063640aa",
"metadata": {},
"outputs": [],
"source": [
"from python_pdb.parsers import parse_pdb_to_pandas"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "b6e4f141-4396-405f-8d76-6dc8c71bed9a",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
record_type
\n",
"
atom_number
\n",
"
atom_name
\n",
"
alt_loc
\n",
"
residue_name
\n",
"
chain_id
\n",
"
residue_seq_id
\n",
"
residue_insert_code
\n",
"
pos_x
\n",
"
pos_y
\n",
"
pos_z
\n",
"
occupancy
\n",
"
b_factor
\n",
"
element
\n",
"
charge
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
ATOM
\n",
"
1
\n",
"
N
\n",
"
A
\n",
"
ALA
\n",
"
C
\n",
"
2
\n",
"
None
\n",
"
48.681
\n",
"
-11.013
\n",
"
29.600
\n",
"
0.5
\n",
"
30.86
\n",
"
N
\n",
"
None
\n",
"
\n",
"
\n",
"
1
\n",
"
ATOM
\n",
"
2
\n",
"
CA
\n",
"
A
\n",
"
ALA
\n",
"
C
\n",
"
2
\n",
"
None
\n",
"
49.343
\n",
"
-9.708
\n",
"
29.330
\n",
"
0.5
\n",
"
29.82
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
2
\n",
"
ATOM
\n",
"
3
\n",
"
C
\n",
"
A
\n",
"
ALA
\n",
"
C
\n",
"
2
\n",
"
None
\n",
"
49.310
\n",
"
-8.792
\n",
"
30.562
\n",
"
0.5
\n",
"
29.16
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
3
\n",
"
ATOM
\n",
"
4
\n",
"
O
\n",
"
A
\n",
"
ALA
\n",
"
C
\n",
"
2
\n",
"
None
\n",
"
48.668
\n",
"
-9.107
\n",
"
31.537
\n",
"
0.5
\n",
"
29.75
\n",
"
O
\n",
"
None
\n",
"
\n",
"
\n",
"
4
\n",
"
ATOM
\n",
"
5
\n",
"
CB
\n",
"
A
\n",
"
ALA
\n",
"
C
\n",
"
2
\n",
"
None
\n",
"
48.679
\n",
"
-9.044
\n",
"
28.146
\n",
"
0.5
\n",
"
29.57
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
6644
\n",
"
HETATM
\n",
"
6645
\n",
"
O
\n",
"
None
\n",
"
HOH
\n",
"
B
\n",
"
128
\n",
"
None
\n",
"
63.467
\n",
"
-9.052
\n",
"
4.232
\n",
"
1.0
\n",
"
46.86
\n",
"
O
\n",
"
None
\n",
"
\n",
"
\n",
"
6645
\n",
"
HETATM
\n",
"
6646
\n",
"
O
\n",
"
None
\n",
"
HOH
\n",
"
B
\n",
"
129
\n",
"
None
\n",
"
64.998
\n",
"
-3.887
\n",
"
10.735
\n",
"
1.0
\n",
"
48.05
\n",
"
O
\n",
"
None
\n",
"
\n",
"
\n",
"
6646
\n",
"
HETATM
\n",
"
6647
\n",
"
O
\n",
"
None
\n",
"
HOH
\n",
"
B
\n",
"
130
\n",
"
None
\n",
"
69.089
\n",
"
-37.773
\n",
"
1.079
\n",
"
1.0
\n",
"
63.55
\n",
"
O
\n",
"
None
\n",
"
\n",
"
\n",
"
6647
\n",
"
HETATM
\n",
"
6648
\n",
"
O
\n",
"
None
\n",
"
HOH
\n",
"
B
\n",
"
131
\n",
"
None
\n",
"
70.137
\n",
"
-40.643
\n",
"
1.067
\n",
"
1.0
\n",
"
59.75
\n",
"
O
\n",
"
None
\n",
"
\n",
"
\n",
"
6648
\n",
"
HETATM
\n",
"
6649
\n",
"
O
\n",
"
None
\n",
"
HOH
\n",
"
B
\n",
"
132
\n",
"
None
\n",
"
66.479
\n",
"
4.782
\n",
"
14.497
\n",
"
1.0
\n",
"
64.56
\n",
"
O
\n",
"
None
\n",
"
\n",
" \n",
"
\n",
"
6649 rows × 15 columns
\n",
"
"
],
"text/plain": [
" record_type atom_number atom_name alt_loc residue_name chain_id \\\n",
"0 ATOM 1 N A ALA C \n",
"1 ATOM 2 CA A ALA C \n",
"2 ATOM 3 C A ALA C \n",
"3 ATOM 4 O A ALA C \n",
"4 ATOM 5 CB A ALA C \n",
"... ... ... ... ... ... ... \n",
"6644 HETATM 6645 O None HOH B \n",
"6645 HETATM 6646 O None HOH B \n",
"6646 HETATM 6647 O None HOH B \n",
"6647 HETATM 6648 O None HOH B \n",
"6648 HETATM 6649 O None HOH B \n",
"\n",
" residue_seq_id residue_insert_code pos_x pos_y pos_z occupancy \\\n",
"0 2 None 48.681 -11.013 29.600 0.5 \n",
"1 2 None 49.343 -9.708 29.330 0.5 \n",
"2 2 None 49.310 -8.792 30.562 0.5 \n",
"3 2 None 48.668 -9.107 31.537 0.5 \n",
"4 2 None 48.679 -9.044 28.146 0.5 \n",
"... ... ... ... ... ... ... \n",
"6644 128 None 63.467 -9.052 4.232 1.0 \n",
"6645 129 None 64.998 -3.887 10.735 1.0 \n",
"6646 130 None 69.089 -37.773 1.079 1.0 \n",
"6647 131 None 70.137 -40.643 1.067 1.0 \n",
"6648 132 None 66.479 4.782 14.497 1.0 \n",
"\n",
" b_factor element charge \n",
"0 30.86 N None \n",
"1 29.82 C None \n",
"2 29.16 C None \n",
"3 29.75 O None \n",
"4 29.57 C None \n",
"... ... ... ... \n",
"6644 46.86 O None \n",
"6645 48.05 O None \n",
"6646 63.55 O None \n",
"6647 59.75 O None \n",
"6648 64.56 O None \n",
"\n",
"[6649 rows x 15 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open('data/6eqb.pdb', 'r') as fh:\n",
" df = parse_pdb_to_pandas(fh.read())\n",
"\n",
"df"
]
},
{
"cell_type": "markdown",
"id": "5450287e-8d14-4057-9cbd-0c477c43d9a1",
"metadata": {},
"source": [
"To start things off, let's clean up this structure by highlighting one of the most powerful aspects of this approach: querying. As you can seen from the data frame above- there are water molecules in the structure that we might not care about. Let's remove them..."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "3b71804d-8bc1-41c8-ad29-9b07fa2b91c3",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
record_type
\n",
"
atom_number
\n",
"
atom_name
\n",
"
alt_loc
\n",
"
residue_name
\n",
"
chain_id
\n",
"
residue_seq_id
\n",
"
residue_insert_code
\n",
"
pos_x
\n",
"
pos_y
\n",
"
pos_z
\n",
"
occupancy
\n",
"
b_factor
\n",
"
element
\n",
"
charge
\n",
"
\n",
" \n",
" \n",
"
\n",
"
6633
\n",
"
ATOM
\n",
"
6634
\n",
"
CB
\n",
"
None
\n",
"
MET
\n",
"
B
\n",
"
125
\n",
"
None
\n",
"
74.125
\n",
"
-32.337
\n",
"
9.293
\n",
"
1.0
\n",
"
121.02
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
6634
\n",
"
ATOM
\n",
"
6635
\n",
"
CG
\n",
"
None
\n",
"
MET
\n",
"
B
\n",
"
125
\n",
"
None
\n",
"
73.143
\n",
"
-31.632
\n",
"
10.263
\n",
"
1.0
\n",
"
116.33
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
6635
\n",
"
ATOM
\n",
"
6636
\n",
"
SD
\n",
"
None
\n",
"
MET
\n",
"
B
\n",
"
125
\n",
"
None
\n",
"
71.379
\n",
"
-32.103
\n",
"
10.373
\n",
"
1.0
\n",
"
113.91
\n",
"
S
\n",
"
None
\n",
"
\n",
"
\n",
"
6636
\n",
"
ATOM
\n",
"
6637
\n",
"
CE
\n",
"
None
\n",
"
MET
\n",
"
B
\n",
"
125
\n",
"
None
\n",
"
70.626
\n",
"
-31.028
\n",
"
9.134
\n",
"
1.0
\n",
"
109.06
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
6637
\n",
"
ATOM
\n",
"
6638
\n",
"
OXT
\n",
"
None
\n",
"
MET
\n",
"
B
\n",
"
125
\n",
"
None
\n",
"
74.839
\n",
"
-34.197
\n",
"
6.246
\n",
"
1.0
\n",
"
130.70
\n",
"
O
\n",
"
None
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" record_type atom_number atom_name alt_loc residue_name chain_id \\\n",
"6633 ATOM 6634 CB None MET B \n",
"6634 ATOM 6635 CG None MET B \n",
"6635 ATOM 6636 SD None MET B \n",
"6636 ATOM 6637 CE None MET B \n",
"6637 ATOM 6638 OXT None MET B \n",
"\n",
" residue_seq_id residue_insert_code pos_x pos_y pos_z occupancy \\\n",
"6633 125 None 74.125 -32.337 9.293 1.0 \n",
"6634 125 None 73.143 -31.632 10.263 1.0 \n",
"6635 125 None 71.379 -32.103 10.373 1.0 \n",
"6636 125 None 70.626 -31.028 9.134 1.0 \n",
"6637 125 None 74.839 -34.197 6.246 1.0 \n",
"\n",
" b_factor element charge \n",
"6633 121.02 C None \n",
"6634 116.33 C None \n",
"6635 113.91 S None \n",
"6636 109.06 C None \n",
"6637 130.70 O None "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_clean = df.query(\"record_type == 'ATOM'\") # or \"residue_name != 'HOH'\" would have worked as well\n",
"df_clean.tail()"
]
},
{
"cell_type": "markdown",
"id": "db2eeadf-075a-4d28-89b6-976cd07cc573",
"metadata": {},
"source": [
"By using pandas' built in querying function- we can easily get rid of the HETATMs in the file that we might not care about. We can also use this querying to just select the TCR or pMHC to perform analysis on this molecule seperately. In this example, the TCR $\\alpha$- and $\\beta$ chain is labelled as chains D and E repectively. The MHC molecule is chain A (B- representing the $\\beta_2$m) and C the peptide."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "65640cbd-c8be-4169-9e3f-fb0020625ff1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"REMARK 5 IMGT RENUMBERED STRUCTURE 6EQB GENERATED BY STCRDAB\n",
"REMARK 5 TCR CHAINS ARE RENUMBERED IN THE VARIABLE REGIONS ONLY\n",
"REMARK 5 MHC CHAINS ARE RENUMBERED IN THE G DOMAINS OR FOR B2M-GLOBULIN\n",
"REMARK 5 NON-TCR AND NON-MHC CHAINS ARE LEFT WITH RESIDUE IDS AS IN PDB\n",
"REMARK 5 PAIRED_ABTCR BCHAIN=E ACHAIN=D MHCCHAINS=AB AGCHAIN=C AGTYPE=PEPTIDE\n"
]
}
],
"source": [
"!head -n5 data/6eqb.pdb"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "6c5fa0e7-f6bc-48e0-92bc-b81353f8589b",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
record_type
\n",
"
atom_number
\n",
"
atom_name
\n",
"
alt_loc
\n",
"
residue_name
\n",
"
chain_id
\n",
"
residue_seq_id
\n",
"
residue_insert_code
\n",
"
pos_x
\n",
"
pos_y
\n",
"
pos_z
\n",
"
occupancy
\n",
"
b_factor
\n",
"
element
\n",
"
charge
\n",
"
\n",
" \n",
" \n",
"
\n",
"
57
\n",
"
ATOM
\n",
"
58
\n",
"
N
\n",
"
None
\n",
"
SER
\n",
"
E
\n",
"
1
\n",
"
None
\n",
"
44.786
\n",
"
19.936
\n",
"
31.694
\n",
"
1.0
\n",
"
91.71
\n",
"
N
\n",
"
None
\n",
"
\n",
"
\n",
"
58
\n",
"
ATOM
\n",
"
59
\n",
"
CA
\n",
"
None
\n",
"
SER
\n",
"
E
\n",
"
1
\n",
"
None
\n",
"
43.328
\n",
"
20.085
\n",
"
31.879
\n",
"
1.0
\n",
"
88.14
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
59
\n",
"
ATOM
\n",
"
60
\n",
"
C
\n",
"
None
\n",
"
SER
\n",
"
E
\n",
"
1
\n",
"
None
\n",
"
42.582
\n",
"
19.234
\n",
"
30.860
\n",
"
1.0
\n",
"
80.31
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
60
\n",
"
ATOM
\n",
"
61
\n",
"
O
\n",
"
None
\n",
"
SER
\n",
"
E
\n",
"
1
\n",
"
None
\n",
"
41.944
\n",
"
19.762
\n",
"
29.940
\n",
"
1.0
\n",
"
81.48
\n",
"
O
\n",
"
None
\n",
"
\n",
"
\n",
"
61
\n",
"
ATOM
\n",
"
62
\n",
"
CB
\n",
"
None
\n",
"
SER
\n",
"
E
\n",
"
1
\n",
"
None
\n",
"
42.912
\n",
"
21.571
\n",
"
31.778
\n",
"
1.0
\n",
"
93.53
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
3519
\n",
"
ATOM
\n",
"
3520
\n",
"
CD1
\n",
"
None
\n",
"
PHE
\n",
"
D
\n",
"
215
\n",
"
None
\n",
"
-5.784
\n",
"
33.229
\n",
"
67.928
\n",
"
1.0
\n",
"
154.28
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
3520
\n",
"
ATOM
\n",
"
3521
\n",
"
CD2
\n",
"
None
\n",
"
PHE
\n",
"
D
\n",
"
215
\n",
"
None
\n",
"
-6.202
\n",
"
32.551
\n",
"
65.649
\n",
"
1.0
\n",
"
145.03
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
3521
\n",
"
ATOM
\n",
"
3522
\n",
"
CE1
\n",
"
None
\n",
"
PHE
\n",
"
D
\n",
"
215
\n",
"
None
\n",
"
-6.684
\n",
"
34.292
\n",
"
67.786
\n",
"
1.0
\n",
"
160.08
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
3522
\n",
"
ATOM
\n",
"
3523
\n",
"
CE2
\n",
"
None
\n",
"
PHE
\n",
"
D
\n",
"
215
\n",
"
None
\n",
"
-7.092
\n",
"
33.613
\n",
"
65.506
\n",
"
1.0
\n",
"
151.52
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
3523
\n",
"
ATOM
\n",
"
3524
\n",
"
CZ
\n",
"
None
\n",
"
PHE
\n",
"
D
\n",
"
215
\n",
"
None
\n",
"
-7.336
\n",
"
34.483
\n",
"
66.576
\n",
"
1.0
\n",
"
159.15
\n",
"
C
\n",
"
None
\n",
"
\n",
" \n",
"
\n",
"
3461 rows × 15 columns
\n",
"
"
],
"text/plain": [
" record_type atom_number atom_name alt_loc residue_name chain_id \\\n",
"57 ATOM 58 N None SER E \n",
"58 ATOM 59 CA None SER E \n",
"59 ATOM 60 C None SER E \n",
"60 ATOM 61 O None SER E \n",
"61 ATOM 62 CB None SER E \n",
"... ... ... ... ... ... ... \n",
"3519 ATOM 3520 CD1 None PHE D \n",
"3520 ATOM 3521 CD2 None PHE D \n",
"3521 ATOM 3522 CE1 None PHE D \n",
"3522 ATOM 3523 CE2 None PHE D \n",
"3523 ATOM 3524 CZ None PHE D \n",
"\n",
" residue_seq_id residue_insert_code pos_x pos_y pos_z occupancy \\\n",
"57 1 None 44.786 19.936 31.694 1.0 \n",
"58 1 None 43.328 20.085 31.879 1.0 \n",
"59 1 None 42.582 19.234 30.860 1.0 \n",
"60 1 None 41.944 19.762 29.940 1.0 \n",
"61 1 None 42.912 21.571 31.778 1.0 \n",
"... ... ... ... ... ... ... \n",
"3519 215 None -5.784 33.229 67.928 1.0 \n",
"3520 215 None -6.202 32.551 65.649 1.0 \n",
"3521 215 None -6.684 34.292 67.786 1.0 \n",
"3522 215 None -7.092 33.613 65.506 1.0 \n",
"3523 215 None -7.336 34.483 66.576 1.0 \n",
"\n",
" b_factor element charge \n",
"57 91.71 N None \n",
"58 88.14 C None \n",
"59 80.31 C None \n",
"60 81.48 O None \n",
"61 93.53 C None \n",
"... ... ... ... \n",
"3519 154.28 C None \n",
"3520 145.03 C None \n",
"3521 160.08 C None \n",
"3522 151.52 C None \n",
"3523 159.15 C None \n",
"\n",
"[3461 rows x 15 columns]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tcr_df = df_clean.query(\"chain_id == 'D' or chain_id == 'E'\")\n",
"tcr_df"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "263ac0e5-f9e1-4901-9f65-da74b5b8d27a",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
record_type
\n",
"
atom_number
\n",
"
atom_name
\n",
"
alt_loc
\n",
"
residue_name
\n",
"
chain_id
\n",
"
residue_seq_id
\n",
"
residue_insert_code
\n",
"
pos_x
\n",
"
pos_y
\n",
"
pos_z
\n",
"
occupancy
\n",
"
b_factor
\n",
"
element
\n",
"
charge
\n",
"
\n",
" \n",
" \n",
"
\n",
"
3541
\n",
"
ATOM
\n",
"
3542
\n",
"
N
\n",
"
None
\n",
"
GLY
\n",
"
A
\n",
"
1
\n",
"
None
\n",
"
63.937
\n",
"
-26.599
\n",
"
37.997
\n",
"
1.0
\n",
"
88.67
\n",
"
N
\n",
"
None
\n",
"
\n",
"
\n",
"
3542
\n",
"
ATOM
\n",
"
3543
\n",
"
CA
\n",
"
None
\n",
"
GLY
\n",
"
A
\n",
"
1
\n",
"
None
\n",
"
64.891
\n",
"
-25.601
\n",
"
38.583
\n",
"
1.0
\n",
"
88.18
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
3543
\n",
"
ATOM
\n",
"
3544
\n",
"
C
\n",
"
None
\n",
"
GLY
\n",
"
A
\n",
"
1
\n",
"
None
\n",
"
64.208
\n",
"
-24.275
\n",
"
38.448
\n",
"
1.0
\n",
"
82.85
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
3544
\n",
"
ATOM
\n",
"
3545
\n",
"
O
\n",
"
None
\n",
"
GLY
\n",
"
A
\n",
"
1
\n",
"
None
\n",
"
63.079
\n",
"
-24.143
\n",
"
38.876
\n",
"
1.0
\n",
"
81.66
\n",
"
O
\n",
"
None
\n",
"
\n",
"
\n",
"
3545
\n",
"
ATOM
\n",
"
3546
\n",
"
N
\n",
"
None
\n",
"
SER
\n",
"
A
\n",
"
2
\n",
"
None
\n",
"
64.856
\n",
"
-23.315
\n",
"
37.808
\n",
"
1.0
\n",
"
80.55
\n",
"
N
\n",
"
None
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
5790
\n",
"
ATOM
\n",
"
5791
\n",
"
O
\n",
"
None
\n",
"
PRO
\n",
"
A
\n",
"
1186
\n",
"
None
\n",
"
77.326
\n",
"
-47.026
\n",
"
15.302
\n",
"
1.0
\n",
"
147.25
\n",
"
O
\n",
"
None
\n",
"
\n",
"
\n",
"
5791
\n",
"
ATOM
\n",
"
5792
\n",
"
CB
\n",
"
None
\n",
"
PRO
\n",
"
A
\n",
"
1186
\n",
"
None
\n",
"
79.797
\n",
"
-49.588
\n",
"
14.420
\n",
"
1.0
\n",
"
159.44
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
5792
\n",
"
ATOM
\n",
"
5793
\n",
"
CG
\n",
"
None
\n",
"
PRO
\n",
"
A
\n",
"
1186
\n",
"
None
\n",
"
81.295
\n",
"
-49.731
\n",
"
14.585
\n",
"
1.0
\n",
"
160.29
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
5793
\n",
"
ATOM
\n",
"
5794
\n",
"
CD
\n",
"
None
\n",
"
PRO
\n",
"
A
\n",
"
1186
\n",
"
None
\n",
"
81.803
\n",
"
-48.494
\n",
"
15.300
\n",
"
1.0
\n",
"
158.37
\n",
"
C
\n",
"
None
\n",
"
\n",
"
\n",
"
5794
\n",
"
ATOM
\n",
"
5795
\n",
"
OXT
\n",
"
None
\n",
"
PRO
\n",
"
A
\n",
"
1186
\n",
"
None
\n",
"
77.441
\n",
"
-48.931
\n",
"
16.082
\n",
"
1.0
\n",
"
151.45
\n",
"
O
\n",
"
None
\n",
"
\n",
" \n",
"
\n",
"
2254 rows × 15 columns
\n",
"
"
],
"text/plain": [
" record_type atom_number atom_name alt_loc residue_name chain_id \\\n",
"3541 ATOM 3542 N None GLY A \n",
"3542 ATOM 3543 CA None GLY A \n",
"3543 ATOM 3544 C None GLY A \n",
"3544 ATOM 3545 O None GLY A \n",
"3545 ATOM 3546 N None SER A \n",
"... ... ... ... ... ... ... \n",
"5790 ATOM 5791 O None PRO A \n",
"5791 ATOM 5792 CB None PRO A \n",
"5792 ATOM 5793 CG None PRO A \n",
"5793 ATOM 5794 CD None PRO A \n",
"5794 ATOM 5795 OXT None PRO A \n",
"\n",
" residue_seq_id residue_insert_code pos_x pos_y pos_z occupancy \\\n",
"3541 1 None 63.937 -26.599 37.997 1.0 \n",
"3542 1 None 64.891 -25.601 38.583 1.0 \n",
"3543 1 None 64.208 -24.275 38.448 1.0 \n",
"3544 1 None 63.079 -24.143 38.876 1.0 \n",
"3545 2 None 64.856 -23.315 37.808 1.0 \n",
"... ... ... ... ... ... ... \n",
"5790 1186 None 77.326 -47.026 15.302 1.0 \n",
"5791 1186 None 79.797 -49.588 14.420 1.0 \n",
"5792 1186 None 81.295 -49.731 14.585 1.0 \n",
"5793 1186 None 81.803 -48.494 15.300 1.0 \n",
"5794 1186 None 77.441 -48.931 16.082 1.0 \n",
"\n",
" b_factor element charge \n",
"3541 88.67 N None \n",
"3542 88.18 C None \n",
"3543 82.85 C None \n",
"3544 81.66 O None \n",
"3545 80.55 N None \n",
"... ... ... ... \n",
"5790 147.25 O None \n",
"5791 159.44 C None \n",
"5792 160.29 C None \n",
"5793 158.37 C None \n",
"5794 151.45 O None \n",
"\n",
"[2254 rows x 15 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mhc_df = df_clean.query(\"chain_id == 'A'\")\n",
"mhc_df"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "d8d7c21a-9e77-4ae2-a62f-d9494ae73ef6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The peptide is a 9-mer!\n"
]
}
],
"source": [
"peptide_df = df_clean.query(\"chain_id == 'C'\")\n",
"\n",
"peptide_residues_df = peptide_df.groupby(['residue_seq_id', 'residue_insert_code'], dropna=False)\n",
"print(f'The peptide is a {len(peptide_residues_df)}-mer!')"
]
},
{
"cell_type": "markdown",
"id": "2aa9b138-a5de-4364-9354-a2ecdd6d84c4",
"metadata": {},
"source": [
"Another advantage of using pandas is we can add new columns to annotate properties in the structure that we care about. In this example, since the TCR is from STCRDab and has been renumbered using the [IMGT numbering convention](https://www.imgt.org/IMGTScientificChart/Nomenclature/IMGT-FRCDRdefinition.html) we can easily identify the complimentary determining regions based on their `residue_seq_id` property."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "cf2b8449-d99b-4fe2-b7dd-6d5e2e4480d9",
"metadata": {},
"outputs": [],
"source": [
"IMGT_CDR1 = set(range(27, 38 + 1))\n",
"IMGT_CDR2 = set(range(56, 65 + 1))\n",
"IMGT_CDR3 = set(range(105, 117 + 1))\n",
"\n",
"\n",
"def assign_cdr_number(seq_id: int) -> int | None:\n",
" '''\n",
" Map imgt_id to CDR domains, return number associated with domain or return None if input is not in a CDR\n",
" domain.\n",
" '''\n",
" if seq_id in IMGT_CDR1:\n",
" return 1\n",
"\n",
" if seq_id in IMGT_CDR2:\n",
" return 2\n",
"\n",
" if seq_id in IMGT_CDR3:\n",
" return 3\n",
"\n",
" return None\n",
"\n",
"tcr_df = tcr_df.copy() # Doing this on a copy of the dataframe since it is originally a slice of df!\n",
"tcr_df['cdr'] = tcr_df['residue_seq_id'].map(assign_cdr_number)"
]
},
{
"cell_type": "markdown",
"id": "6c88a852-fc6c-4778-8ddf-400cf8f0e71f",
"metadata": {},
"source": [
"We can also annotations for the $\\alpha$ and $\\beta$ chain since these are defined by the STCRDab header."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "c146cbc8-0e20-4d92-94f3-9f15ab78f18d",
"metadata": {},
"outputs": [],
"source": [
"tcr_df['chain_type'] = tcr_df['chain_id'].map(lambda chain_id: 'alpha' if chain_id == 'D' else 'beta')"
]
},
{
"cell_type": "markdown",
"id": "de413b50-f62e-44c5-854f-e4305476872a",
"metadata": {},
"source": [
"Now we can easily get rich information about the TCR CDR loops with ease."
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "17838d05-d15b-4c24-b413-6d24d31dfef1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"chain_type cdr\n",
"alpha 1.0 6\n",
" 2.0 6\n",
" 3.0 9\n",
"beta 1.0 6\n",
" 2.0 5\n",
" 3.0 13\n",
"dtype: int64"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tcr_cdrs_df = tcr_df.query('cdr.notnull()')\n",
"\n",
"cdr_lengths = tcr_cdrs_df[\n",
" ['chain_type', 'cdr', 'residue_seq_id', 'residue_insert_code']\n",
"].drop_duplicates().groupby(['chain_type', 'cdr'], dropna=False).size()\n",
"\n",
"cdr_lengths"
]
},
{
"cell_type": "markdown",
"id": "85d75d9b-999f-45a4-84bf-81ff030f96d4",
"metadata": {},
"source": [
"We can also easily properties such as b-factors in the TCR variable domain."
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "420ebece-4820-4118-82ba-a86424838d72",
"metadata": {},
"outputs": [],
"source": [
"import seaborn as sns"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "47f76eb6-e44e-473e-b902-954d6eea0dc2",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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QmYEAoFAIBDUNITMCAQCgUAgqGkImREIBKHgHe94h7roootyPuaVr3wldYduBLzwwgsqEolQf65s+MMf/kCP8TchFQgE+SGe5+MFAoEgI/793/+dmpEKNFasWKH27NmjFixYUOlDEQjqHkJmBAIBIZFIUIf4QtHT0xPq8dQ60AUbHZ8FAkHpIWEmgaBBgZDP3/7t31LYB+rBeeedp5588kl1/vnnq87OTtXf36/+8i//Uh08eNB9zk9/+lN1/PHHq7a2NjV//nx1zjnnqLGxsYxhJtz+9re/nV5ryZIl6t/+7d9mHQNCLDfddFPabb29veq73/2u+/eOHTvUW97yFrp93rx56sILL6QQThAgjPOSl7xEdXR00PNf+tKXqm3btrn333zzzerkk09Wra2t6ogjjlCf/vSn1czMjHv/5s2b1ctf/nK6/5hjjlG33XZbxmMOGmb61a9+pY466ig6f6961asCfw6BQJAbQmYEggbG9773PVJj/vd//1d94QtfUK9+9avVSSedpB588EF16623qn379hGRABAyufTSS9W73vUutXHjRiIKF198cdbQ0kc+8hF15513EmH47W9/S49/+OGH8zq+6elpIlldXV3qT3/6Ex0nyNFrX/taUpJyAaQE5OoVr3iFevzxx9U999yj3vve9xLBAPB6IFtXXnmlevrpp9W3v/1tIlGf+9zn6P5UKkWfD+fnvvvuU9/61rfUxz72MVUoQMrweq9//euJ4LznPe9RH//4xwt+PYFAYKHSbbsFAkFl8IpXvMI56aST3L8/85nPOOeee27aY3bs2AGm4mzatMl56KGH6PcXXngh4+tdfvnlzoUXXki/j4yMOM3Nzc5PfvIT9/5Dhw45bW1tzpVXXunehtf7+c9/nvY6PT09zrXXXku///d//7ezfv16J5VKufdPTU3R6/zmN7/J+fnwfnj9P/zhDxnvP/vss53Pf/7zabfh/ZYsWUK/4/Xj8biza9cu9/5f//rXGY85E7Zu3UqPfeSRR+jvq666yjnmmGPSHvOxj32MHjMwMDDn6wkEguwQz4xA0MA45ZRT3N8fe+wxdccdd5Dy4ceWLVvUueeeq84++2wKM0Etwd9vetObVF9fX8bHQzk57bTT3NsQIlq/fn1ex4djeu6550iZsTE5OUnvkQt4P4S+cKyvec1rKCQGlQkhL35tKD2sxADJZJJee3x8nNQnmHiXLl3q3n/GGWeoQoHXs89Hsa8nEAg8CJkRCBoY8JIwRkdHKQRyzTXXzHocCAAMrfCM3H333RQ2+trXvqb+8R//kUIwa9asKej9EfLxh6kQWrKPCYTruuuum/XchQsXzvn61157rXr/+99PIbMf//jH6p/+6Z/oM5x++un02vDIIPTjBzwyAoGgdiBkRiAQEGCE/dnPfqZWr16t4vF4VvIBEy1+PvnJT6pVq1apn//85+pDH/pQ2uPWrl2rmpqaiOisXLmSbhsYGFDPPvsseVhsQgIvjm24hSpiHxNIyKJFi1R3d3dBnwseIPxcddVVpIRcf/31RGbw2ps2bVJHHnlkxucdffTR5HPB8bGac++99xZ0DPx6v/jFL9JuK+b1BAKBBzEACwQCwhVXXKEOHz5MJt8HHniAwji/+c1v1Dvf+U4Kv4CYfP7znydz8Pbt29WNN96oDhw4QIu0HwhVvfvd7yYT8O9//3vKkkLIJxpNn3JgOP7617+uHnnkEXrd973vfUSCGJdddhllWiGDCYbdrVu3kpEYasvOnTtzfh48FgQGxl9kMEFNAlni4wUZ+/73v0/qzFNPPUVhoB/96Eek3gAISyHz6PLLL6eQFN4fSlShwGfD++OcgESBVNlZWwKBoHAImREIBAR4Q+AhAXGBHwbeGKRtI6UZJATKyB//+Ef1Z3/2Z7TIY9FHujVSuTPhX/7lX9TLXvYyCl2BGJx11llpHh0Az4cvBY/7i7/4C/XhD39Ytbe3///t3cEJg0AQBdCkDovwZCUWYTk2YzF24jX8PYQcIhIShSHvgRAQXb19Zmbj83x+Z81Ud9IOShBJSMpcy1GlJteu63obx7E9b3YyJbBN09TOZ5ZmWZYWcoZhaNWaeZ5btSnyzqk6bdvWtndn99HrfM2n8g6pfGVbd9/3bXdUwiHwvXumgH9wH4C/kFZbQs7RpxuA66jMAAClCTNAWZnN2Tsy43KmtIj21t5rvQHn0GYCysp/0Ozpuq59NuAsGZbO8U7WzfrANYQZAKA0bSYAoDRhBgAoTZgBAEoTZgCA0oQZAKA0YQYAKE2YAQBKE2YAgFtlD7EIxEyISQw+AAAAAElFTkSuQmCC",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"tcr_variable_df = tcr_df.query('residue_seq_id <= 129')\n",
"sns.lineplot(x=tcr_variable_df['residue_seq_id'], y=tcr_variable_df['b_factor'])"
]
},
{
"cell_type": "markdown",
"id": "02751e2a-5907-4af5-bfb9-c1769650d906",
"metadata": {},
"source": [
"Computing things like contacting residues between the TCR CDR loops and the peptide is a breeze."
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "0cb3bbc1-3d3f-4b1d-98a0-26603a94d344",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "9d8c8519-2eea-466b-8b9b-6af474984acf",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
chain_id_tcr
\n",
"
residue_seq_id_tcr
\n",
"
residue_insert_code_tcr
\n",
"
cdr
\n",
"
chain_type
\n",
"
residue_seq_id_peptide
\n",
"
residue_insert_code_peptide
\n",
"
\n",
" \n",
" \n",
"
\n",
"
6424
\n",
"
E
\n",
"
108
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
8
\n",
"
None
\n",
"
\n",
"
\n",
"
6603
\n",
"
E
\n",
"
109
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
9
\n",
"
None
\n",
"
\n",
"
\n",
"
6641
\n",
"
E
\n",
"
109
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
7
\n",
"
None
\n",
"
\n",
"
\n",
"
6704
\n",
"
E
\n",
"
109
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
8
\n",
"
None
\n",
"
\n",
"
\n",
"
6926
\n",
"
E
\n",
"
110
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
7
\n",
"
None
\n",
"
\n",
"
\n",
"
7151
\n",
"
E
\n",
"
111
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
7
\n",
"
None
\n",
"
\n",
"
\n",
"
7194
\n",
"
E
\n",
"
111
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
4
\n",
"
None
\n",
"
\n",
"
\n",
"
7253
\n",
"
E
\n",
"
111
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
5
\n",
"
None
\n",
"
\n",
"
\n",
"
7261
\n",
"
E
\n",
"
111
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
6
\n",
"
None
\n",
"
\n",
"
\n",
"
7280
\n",
"
E
\n",
"
111
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
8
\n",
"
None
\n",
"
\n",
"
\n",
"
7361
\n",
"
E
\n",
"
111
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
3
\n",
"
None
\n",
"
\n",
"
\n",
"
7594
\n",
"
E
\n",
"
112
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
4
\n",
"
None
\n",
"
\n",
"
\n",
"
7596
\n",
"
E
\n",
"
112
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
5
\n",
"
None
\n",
"
\n",
"
\n",
"
7603
\n",
"
E
\n",
"
112
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
6
\n",
"
None
\n",
"
\n",
"
\n",
"
7607
\n",
"
E
\n",
"
112
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
7
\n",
"
None
\n",
"
\n",
"
\n",
"
7622
\n",
"
E
\n",
"
112
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
8
\n",
"
None
\n",
"
\n",
"
\n",
"
8114
\n",
"
E
\n",
"
113
\n",
"
None
\n",
"
3.0
\n",
"
beta
\n",
"
5
\n",
"
None
\n",
"
\n",
"
\n",
"
11763
\n",
"
D
\n",
"
37
\n",
"
None
\n",
"
1.0
\n",
"
alpha
\n",
"
5
\n",
"
None
\n",
"
\n",
"
\n",
"
11923
\n",
"
D
\n",
"
37
\n",
"
None
\n",
"
1.0
\n",
"
alpha
\n",
"
4
\n",
"
None
\n",
"
\n",
"
\n",
"
12030
\n",
"
D
\n",
"
37
\n",
"
None
\n",
"
1.0
\n",
"
alpha
\n",
"
2
\n",
"
None
\n",
"
\n",
"
\n",
"
12033
\n",
"
D
\n",
"
37
\n",
"
None
\n",
"
1.0
\n",
"
alpha
\n",
"
3
\n",
"
None
\n",
"
\n",
"
\n",
"
12218
\n",
"
D
\n",
"
38
\n",
"
None
\n",
"
1.0
\n",
"
alpha
\n",
"
5
\n",
"
None
\n",
"
\n",
"
\n",
"
13131
\n",
"
D
\n",
"
57
\n",
"
None
\n",
"
2.0
\n",
"
alpha
\n",
"
5
\n",
"
None
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" chain_id_tcr residue_seq_id_tcr residue_insert_code_tcr cdr \\\n",
"6424 E 108 None 3.0 \n",
"6603 E 109 None 3.0 \n",
"6641 E 109 None 3.0 \n",
"6704 E 109 None 3.0 \n",
"6926 E 110 None 3.0 \n",
"7151 E 111 None 3.0 \n",
"7194 E 111 None 3.0 \n",
"7253 E 111 None 3.0 \n",
"7261 E 111 None 3.0 \n",
"7280 E 111 None 3.0 \n",
"7361 E 111 None 3.0 \n",
"7594 E 112 None 3.0 \n",
"7596 E 112 None 3.0 \n",
"7603 E 112 None 3.0 \n",
"7607 E 112 None 3.0 \n",
"7622 E 112 None 3.0 \n",
"8114 E 113 None 3.0 \n",
"11763 D 37 None 1.0 \n",
"11923 D 37 None 1.0 \n",
"12030 D 37 None 1.0 \n",
"12033 D 37 None 1.0 \n",
"12218 D 38 None 1.0 \n",
"13131 D 57 None 2.0 \n",
"\n",
" chain_type residue_seq_id_peptide residue_insert_code_peptide \n",
"6424 beta 8 None \n",
"6603 beta 9 None \n",
"6641 beta 7 None \n",
"6704 beta 8 None \n",
"6926 beta 7 None \n",
"7151 beta 7 None \n",
"7194 beta 4 None \n",
"7253 beta 5 None \n",
"7261 beta 6 None \n",
"7280 beta 8 None \n",
"7361 beta 3 None \n",
"7594 beta 4 None \n",
"7596 beta 5 None \n",
"7603 beta 6 None \n",
"7607 beta 7 None \n",
"7622 beta 8 None \n",
"8114 beta 5 None \n",
"11763 alpha 5 None \n",
"11923 alpha 4 None \n",
"12030 alpha 2 None \n",
"12033 alpha 3 None \n",
"12218 alpha 5 None \n",
"13131 alpha 5 None "
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"CONTACT_DISTANCE = 5 # Angstroms (Å)\n",
"\n",
"def euclidean_distance(x1, y1, z1, x2, y2, z2):\n",
" return np.sqrt((x2 - x1)**2 + (y2 - y1)**2 + (z2 - z1)**2)\n",
"\n",
"\n",
"interface = tcr_cdrs_df.merge(peptide_df, how='cross', suffixes=('_tcr', '_peptide'))\n",
"interface['atom_distances'] = euclidean_distance(interface['pos_x_tcr'], interface['pos_y_tcr'], interface['pos_z_tcr'],\n",
" interface['pos_x_peptide'], interface['pos_y_peptide'], interface['pos_z_peptide'])\n",
"\n",
"contacting_atoms = interface[interface['atom_distances'] <= CONTACT_DISTANCE]\n",
"contacting_residues = contacting_atoms[['chain_id_tcr', 'residue_seq_id_tcr', 'residue_insert_code_tcr', 'cdr', 'chain_type',\n",
" 'residue_seq_id_peptide', 'residue_insert_code_peptide']].drop_duplicates()\n",
"\n",
"contacting_residues"
]
},
{
"cell_type": "markdown",
"id": "0974854b-e4d7-487d-8487-1986ddca94e1",
"metadata": {},
"source": [
"Finally, if we want to save part of the data frame as a PDB file, we can convert it back to a `Structure` object and save it to a file. "
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "7e13b11d-fea0-4a81-a66f-5f220b64cdcd",
"metadata": {},
"outputs": [],
"source": [
"import warnings\n",
"\n",
"from python_pdb.entities import Structure, StructureConstructionWarning"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "6aad2173-f2e5-4576-89cc-4068fc78a0ca",
"metadata": {},
"outputs": [],
"source": [
"# Suppressing warnings here because there are alternate locations specified in this PDB file\n",
"with warnings.catch_warnings():\n",
" warnings.filterwarnings('ignore', category=StructureConstructionWarning)\n",
" tcr_structure = Structure.from_pandas(tcr_df)\n",
"\n",
"with open('tcr.pdb', 'w') as fh:\n",
" fh.write(str(tcr_structure))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "8e71c878-c387-40c4-bef3-f097831122d7",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tcr.pdb\n"
]
}
],
"source": [
"!ls | grep '.pdb'"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "b36cde25-4f1e-413d-a4d0-ebeb39caf303",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"ATOM 58 N SER E 1 44.786 19.936 31.694 1.00 91.71 N \n",
"ATOM 59 CA SER E 1 43.328 20.085 31.879 1.00 88.14 C \n",
"ATOM 60 C SER E 1 42.582 19.234 30.860 1.00 80.31 C \n",
"ATOM 61 O SER E 1 41.944 19.762 29.940 1.00 81.48 O \n",
"ATOM 62 CB SER E 1 42.912 21.571 31.778 1.00 93.53 C \n",
"ATOM 63 OG SER E 1 41.483 21.690 31.841 1.00 93.62 O \n",
"ATOM 64 N GLN E 2 42.634 17.921 31.043 1.00 72.67 N \n",
"ATOM 65 CA GLN E 2 41.716 17.039 30.308 1.00 69.30 C \n",
"ATOM 66 C GLN E 2 40.246 17.307 30.674 1.00 66.83 C \n",
"ATOM 67 O GLN E 2 39.999 17.911 31.668 1.00 70.99 O \n"
]
}
],
"source": [
"!head tcr.pdb"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}